"""
列表可修改、支持重复元素且有序
元组、字符串不可修改、支持元素重复且有序

列表、元组、字符串的局限：支持重复元素

如果场景需要对内容做去重处理，列表、元组、字符串就不方便了
而集合，最主要的特点就是：不支持元素重复（自带去重功能）、并且内容无序
"""
"""
列表使用：[]
元组使用：()
字符串使用：""
集合使用：{}

基本语法：
    定义集合字面量：{元素, 元素, ... ..., 元素}
    定义集合变量：变量名称 = {元素, 元素, ... ..., 元素}
    定义空集合：变量名称 = set()
"""

# 定义集合
my_set = {"java", "python", "javascript", "java", "python", "javascript", "java", "python", "javascript"}
my_set_empty = set()  # 定义空集合
print(f"my_set的内容是：{my_set}，类型是：{type(my_set)}")
print(f"my_set_empty的内容是：{my_set_empty}，类型是：{type(my_set_empty)}")

# 添加新元素
my_set.add("html")
my_set.add("java")
print(f"my_set添加元素后的结果是：{my_set}")

# 移除元素
my_set.remove("html")
print(f"my_set移除html后的结果是：{my_set}")

# 随机取出一个元素
my_set = {"java", "python", "javascript"}
element = my_set.pop()
print(f"my_set随机取出一个元素后的结果是：{my_set}，取出的元素是：{element}")

# 清空集合
my_set.clear()
print(f"my_set集合被清空后的结果是：{my_set}")

# 取2个集合的差集
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2)
print(f"取出差集后的结果是：{set3}")
print(f"取出差集后，原有set1的内容是：{set1}")
print(f"取出差集后，原有set2的内容是：{set2}")

# 消除2个集合的差集
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set1.difference_update(set2)
print(f"取出差集后，原有set1的内容是：{set1}")
print(f"取出差集后，原有set2的内容是：{set2}")

# 2个集合合并为1个
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.union(set2)
print(f"取出差集后的结果是：{set3}")
print(f"取出差集后，原有set1的内容是：{set1}")
print(f"取出差集后，原有set2的内容是：{set2}")

# 统计集合元素数量
set1 = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}
num = len(set1)
print(f"集合内的元素数量有：{num}个")

# 集合的遍历
set1 = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}
for element in set1:
    print(f"集合的元素有：{element}")

"""
可以容纳多个数据
可以容纳不同类型的数据
数据是无序存储的
不允许重复数据存在
可以修改
支持for循环
"""

print("-------------------------------------------练习：信息去重-------------------------------------")
my_list = ["java", "python", "javascript", "java", "python", "javascript", "java", "python", "javascript"]

my_set = set()

for element in my_list:
    my_set.add(element)

print(f"my_list:{my_list}")
print(f"my_set:{my_set}")

